package com.zhy.sunmi.utils;

import com.zhy.sunmi.bean.ProductResultBean;

import java.math.BigDecimal;

/**
 * @ClassName ProductResultUtils
 * @Description TODO
 * @Author zhouhongyang
 * @DATE 2021/9/29 7:48 下午
 * @Version 1.0
 */
public class ProductResultUtils {
    /***
     *
     *
     * @param sell_price 商品原价
     * @param buy_count 商品数量
     * @param discountoff 商品优惠率（0.1 OFF）
     * @param svat 商品税率
     * @return {@link null}
     * @Author zhouhongyang
     * @Date 2021/9/29
     */

    public static ProductResultBean abs(double sell_price, int buy_count, double discountoff, double svat) {

        BigDecimal sellprice=getScale(BigDecimal.valueOf(sell_price));
        BigDecimal number=getScale(BigDecimal.valueOf(buy_count));
        BigDecimal disOff=getScale(BigDecimal.valueOf(discountoff));
        BigDecimal vat=getScale(BigDecimal.valueOf(svat));
        //商品总价未优惠前总价格
        BigDecimal t_price=getScale(XMathUtil.multiply(number, sellprice));
        //税率小数
        BigDecimal b_vat=getScale(XMathUtil.divide(vat,BigDecimal.valueOf(100)));
        //优惠小数
        BigDecimal b_disOff=getScale(XMathUtil.divide(disOff,BigDecimal.valueOf(100)));
        //优惠打几折（0.9 未Off）
        BigDecimal dis=getScale(XMathUtil.subtract(BigDecimal.valueOf(1),b_disOff));
        //单个商品打折后价格
        BigDecimal dis_sell_price=getScale(XMathUtil.multiply(sellprice,dis));
        //多个商品打折后总价格
        BigDecimal t_d_sp=getScale(XMathUtil.multiply(number,dis_sell_price));
        //打折商品税率计算 d e f
        BigDecimal d = getScale(XMathUtil.multiply(dis_sell_price, b_vat));
        BigDecimal e = getScale(XMathUtil.add(BigDecimal.valueOf(1), b_vat));
        //单个商品税钱
        BigDecimal vat_money = getScale(XMathUtil.divide(d, e));
        //单个商品总税钱
        BigDecimal t_vat =getScale(XMathUtil.multiply(number, vat_money));

        ProductResultBean productResultBean = new ProductResultBean(sellprice,number,disOff,vat,t_price,b_vat,b_disOff,dis,dis_sell_price,t_d_sp,vat_money,t_vat);

        return productResultBean;
    }


    private static BigDecimal getScale(BigDecimal bigDecimal) {
        return bigDecimal.setScale(2, BigDecimal.ROUND_DOWN);
    }


}
